
package Online;

import Offline.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 * @author Alvaro Garcia Tapia
 * @author Pablo Mosquera Diaz
 * @author Victor Navarro Ortego
 * @author Adrian Neila Serrano
 * @author Daniel Sanchez Suarez
 * 
 * @proyecto Gestor de Tareas Online
 * @version 1.61
 */
public class Mapas {
    
     /*
     * Variables para la conexión a la BD
     */
        private String bd = "is2"; 
        private String user = "root";
        private String url ="jdbc:mysql://localhost/" + bd+"?zeroDateTimeBehavior=convertToNull";;
        private Connection conexion;
        private java.sql.Statement statement;
        
        public Mapas(){
            try {
                //Se añade la biblioteca de mysql
                Class.forName("com.mysql.jdbc.Driver");
                //Se conecta a la BD
                conexion = DriverManager.getConnection(url, user,"");
                //Se genera la variable que interacciona con la BD
                statement = conexion.createStatement();
            } catch (SQLException ex) {
            } catch (ClassNotFoundException ex) {
            }
        }
        
        /**
         * Metodo que indica el estado de la conexion
         * @return true si se ha conectado, false en otro caso
         */
        public boolean estado(){
            return (!(statement == null));
        }

        
        
        
        /**
         * Metodo que devuelve las listas de un usuario
         * @param user
         * @return Cadena de String con los nombres de las listas
         */
        public String[] getListas(String id){
            String[] listas = new String[100];
            int numlista = 0;
            try { 
               //Consulta SQL, buscando un usuario que coincida user
                String consulta = "SELECT L1.Nombre nombre FROM `listas de mapa` L1 Where L1.idMapa = "+id+";";
                //Resultado de la consulta
                ResultSet result = statement.executeQuery(consulta);
                result.getRow();
                //Comprobación si hay al menos un resultado
                while (result.next()){
                    //Consulta SQL, buscando un usuario que coincida user
                    String consultal = "SELECT L1.Nombre nombre FROM `lista` L1 "
                            + "Where L1.Identificador = \""+result.getString(1)+"\";";
                    //Resultado de la consulta
                    java.sql.Statement statementl = conexion.createStatement();
                    ResultSet resultl = statementl.executeQuery(consultal);
                    resultl.next();
                    listas[numlista] = resultl.getString(1);
                    numlista++;
                }
            
            } catch (SQLException ex) {
                //Si no se encontraron resultados se devuelve null
                listas = null;
            }
            return listas;
        }     
        
        
        /**
         * Metodo que devuelve los id de las listas de un usuario
         * @param user
         * @return Cadena de String con los nombres de las listas
         */
        public String[] getidListas(String id){
            String[] listas = new String[100];
            int numlista = 0;
            try { 
               //Consulta SQL, buscando un usuario que coincida user
                String consulta = "SELECT L1.Nombre nombre FROM `listas de mapa` L1 Where L1.idMapa = "+id+";";
                //Resultado de la consulta
                ResultSet result = statement.executeQuery(consulta);
                result.getRow();
                //Comprobación si hay al menos un resultado
                while (result.next()){
                    listas[numlista] = result.getString(1);
                    numlista++;
                }
            
            } catch (SQLException ex) {
                //Si no se encontraron resultados se devuelve null
                listas = null;
            }
            return listas;
        }
        
                
        /**
         * Metodo que devuelve los mapas de un usuario
         * @param user
         * @return String[][]
         */
        public String[][] getMapas(String user){
            String[][] listas = new String[3][100];
            int numlista = 0;
            try { 
               //Consulta SQL, buscando un usuario que coincida user
                String consulta = "SELECT * FROM `mapa` L1 Where L1.Usuario = \""+user+"\";";
                //Resultado de la consulta
                ResultSet result = statement.executeQuery(consulta);
                result.getRow();
                //Comprobación si hay al menos un resultado
                while (result.next()){
                    listas[0][numlista] = result.getString(1);
                    listas[1][numlista] = result.getString(2);
                    listas[2][numlista] = result.getString(3);
                    numlista++;
                }
            
            } catch (SQLException ex) {
                //Si no se encontraron resultados se devuelve null
                listas = null;
            }
            return listas;
        }
        
        /**
         * Metodo que devuelve el id de un mapa
         * @param nombre
         * @param user
         * @return String
         */
        public String getid(String nombre,String user){
            String listas = "";
            try { 
               //Consulta SQL, buscando un usuario que coincida user
                String consulta = "SELECT L1.identificador FROM `mapa` L1 Where L1.Usuario = \""+user+"\""
                        + "AND L1.Nombre =\""+nombre+"\";";
                //Resultado de la consulta
                ResultSet result = statement.executeQuery(consulta);
                result.getRow();
                //Comprobación si hay al menos un resultado
                if (result.next()){
                    listas = result.getString(1);
                }
            
            } catch (SQLException ex) {
                //Si no se encontraron resultados se devuelve null
                listas = null;
            }
            return listas;
        }
        
        /**
         * Metodo que indica si existe o no un mapa
         * @param nombre
         * @param user
         * @return boolean
         */
        public boolean existe (String nombre,String user){
            boolean existe = false;
            try { 
               //Consulta SQL, buscando un usuario que coincida user
                String consulta = "SELECT * FROM `mapa` L1 Where L1.Usuario = \""+user+"\""
                        + "AND L1.Nombre =\""+nombre+"\";";
                //Resultado de la consulta
                ResultSet result = statement.executeQuery(consulta);
                result.getRow();
                //Comprobación si hay al menos un resultado
                if (result.next()){
                    existe = true;
                }
            
            } catch (SQLException ex) {
                //Si no se encontraron resultados se devuelve null
                existe = true;
            }
            return existe;
        }
            
        
        /**
         * Metodo que añade una mapa nuevo
         * @param name
         * @param user
         * @return true si se ha añadido, false en otro caso
         */
        public boolean addMapa(String name,String user){
            boolean terminado = true;
            try { 
              //Calendar fecha = Calendar.getInstance();
                Date fecha = new Date();
              //Consulta SQL, insertado una nueva tarea
                String consulta = "INSERT INTO mapa(Nombre, Usuario)"+
                     "VALUES (\""+name+"\",\""+user+"\");";
             //Resultado de la consulta
             int result = statement.executeUpdate(consulta);
             if(result>0)
                    JOptionPane.showMessageDialog (null,"EL mapa \""+name+"\" fue creado exitosamente.",
                        "Atención", JOptionPane.INFORMATION_MESSAGE);
            } catch (SQLException ex) {
                //Si la consulta falla se indica
                terminado = false;
            }
            return terminado;
        }
        
        
        /**
         * Metodo que elimina un mapa
         * @param nombre
         * @param user 
         */
        public void eliminarMapa(String nombre, String user){
            try { 
               //Consulta SQL, para borrar una tarea
                String consulta = "DELETE FROM mapa"+
                                " Where Nombre = \""+nombre+"\" AND "
                                + "Usuario = \""+user+"\";";
                //Resultado de la consulta
                int result = statement.executeUpdate(consulta);
            } catch (SQLException ex) {
            }
        }
        
        
        /**
         * Metodo que mueve una lista de un mapa a otro
         * @param idMant
         * @param idM
         * @param name
         * @return boolean
         */
        public boolean moverlista(String idMant,String idM,String name){
            boolean terminado = true;
            try { 
               //Consulta SQL, para actualizar la tabla de tareas
                String consulta = "UPDATE `listas de mapa` SET idMapa ="+idM+""
                        + " Where idMapa = "+idMant+" AND Nombre = \""
                        + name+"\";";
                //Resultado de la consulta
                int result = statement.executeUpdate(consulta);
            } catch (SQLException ex) {
                //Si la consulta falla
                terminado = false;
            }
            return terminado;
        }
        
        
        
}
